import streamlit as st
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import numpy as np
from datetime import datetime, timedelta
import random
import hashlib

# 页面配置已在主应用中设置

# 页面标题
st.title("🚛 运输管理系统")
st.markdown("---")

# 侧边栏导航
st.sidebar.title("功能导航")
page_selection = st.sidebar.selectbox(
    "选择功能模块",
    ["运输概览", "运输计划", "车辆管理", "司机管理", "路线优化", "运输监控", "成本分析"]
)

# 运输概览页面
if page_selection == "运输概览":
    st.header("📊 运输概览")
    
    # 运输关键指标
    col1, col2, col3, col4 = st.columns(4)
    
    with col1:
        st.metric(
            label="今日运输量",
            value="156 票",
            delta="+12 票"
        )
    
    with col2:
        st.metric(
            label="在途货物",
            value="89 票",
            delta="-5 票"
        )
    
    with col3:
        st.metric(
            label="准时率",
            value="96.8%",
            delta="+1.2%"
        )
    
    with col4:
        st.metric(
            label="运输成本",
            value="¥45,600",
            delta="-¥2,300"
        )
    
    # 运输趋势图表
    col1, col2 = st.columns(2)
    
    with col1:
        # 运输量趋势
        dates = pd.date_range(start='2024-01-01', end='2024-12-31', freq='D')
        transport_volume = pd.DataFrame({
            '日期': dates,
            '运输量': [150 + 30*np.sin(i*2*np.pi/365) + np.random.normal(0, 10) 
                     for i in range(len(dates))]
        })
        
        fig_volume = px.line(transport_volume, x='日期', y='运输量',
                           title="日运输量趋势")
        st.plotly_chart(fig_volume, use_container_width=True)
    
    with col2:
        # 运输方式分布
        transport_modes = pd.DataFrame({
            '运输方式': ['公路运输', '铁路运输', '航空运输', '水路运输'],
            '运输量': [1250, 680, 120, 350],
            '占比': ['52.1%', '28.3%', '5.0%', '14.6%']
        })
        
        fig_modes = px.pie(transport_modes, values='运输量', names='运输方式',
                         title="运输方式分布")
        st.plotly_chart(fig_modes, use_container_width=True)
    
    # 运输状态监控
    st.subheader("运输状态实时监控")
    
    transport_status = pd.DataFrame({
        '运单号': [f'TN{i:08d}' for i in range(1, 16)],
        '发货地': ['北京', '上海', '广州', '深圳', '杭州'] * 3,
        '目的地': ['成都', '西安', '武汉', '长沙', '南京'] * 3,
        '货物类型': ['电子产品', '机械设备', '化工原料', '食品', '纺织品'] * 3,
        '重量(吨)': [2.5, 15.8, 8.3, 5.2, 3.7, 12.1, 6.9, 4.3, 9.8, 7.2, 11.5, 3.9, 8.7, 5.6, 10.2],
        '运输方式': ['公路', '铁路', '公路', '航空', '公路', '铁路', '公路', '航空', '公路', '铁路', '公路', '航空', '公路', '铁路', '公路'],
        '当前状态': ['在途', '已到达', '装货中', '在途', '已到达', '在途', '装货中', '在途', '已到达', '在途', '装货中', '在途', '已到达', '在途', '装货中'],
        '预计到达': ['2024-03-16 14:30', '已到达', '2024-03-15 18:00', '2024-03-15 22:15', '已到达',
                   '2024-03-17 09:45', '2024-03-15 20:30', '2024-03-16 06:20', '已到达', '2024-03-16 16:10',
                   '2024-03-15 19:45', '2024-03-16 11:30', '已到达', '2024-03-17 08:15', '2024-03-15 21:00'],
        '司机': ['张师傅', '李师傅', '王师傅', '赵师傅', '陈师傅'] * 3
    })
    
    # 使用缓存来避免重复计算样式，减少表格抖动
    def highlight_transport_status(row):
        if row['当前状态'] == '装货中':
            return ['background-color: #fff3e0'] * len(row)
        elif row['当前状态'] == '在途':
            return ['background-color: #e3f2fd'] * len(row)
        elif row['当前状态'] == '已到达':
            return ['background-color: #e8f5e8'] * len(row)
        else:
            return [''] * len(row)
    
    styled_df = transport_status.style.apply(highlight_transport_status, axis=1)
    st.dataframe(styled_df, use_container_width=True, height=400)
    
    # 运输预警
    st.subheader("运输预警")
    
    alerts = [
        {"级别": "🔴 紧急", "内容": "运单TN00000008可能延误，需要调度关注", "时间": "2024-03-15 14:30"},
        {"级别": "🟡 注意", "内容": "G318国道施工，影响部分运输路线", "时间": "2024-03-15 10:15"},
        {"级别": "🟡 注意", "内容": "车辆A001需要保养，请安排时间", "时间": "2024-03-15 09:20"},
        {"级别": "🟢 信息", "内容": "本周运输准时率达到96.8%，表现良好", "时间": "2024-03-14 16:45"}
    ]
    
    for alert in alerts:
        if "🔴" in alert["级别"]:
            st.error(f"{alert['级别']} {alert['内容']} - {alert['时间']}")
        elif "🟡" in alert["级别"]:
            st.warning(f"{alert['级别']} {alert['内容']} - {alert['时间']}")
        else:
            st.info(f"{alert['级别']} {alert['内容']} - {alert['时间']}")

# 运输计划页面
elif page_selection == "运输计划":
    st.header("📅 运输计划")
    
    # 新建运输计划
    st.subheader("新建运输计划")
    
    col1, col2, col3 = st.columns(3)
    
    with col1:
        plan_name = st.text_input("计划名称", "2024年3月运输计划")
        origin = st.selectbox("发货地", ["北京", "上海", "广州", "深圳", "杭州", "成都", "西安"])
        destination = st.selectbox("目的地", ["武汉", "长沙", "南京", "合肥", "济南", "郑州", "太原"])
    
    with col2:
        cargo_type = st.selectbox("货物类型", ["电子产品", "机械设备", "化工原料", "食品", "纺织品"])
        weight = st.number_input("货物重量(吨)", min_value=0.1, value=5.0, step=0.1)
        volume = st.number_input("货物体积(m³)", min_value=0.1, value=10.0, step=0.1)
    
    with col3:
        transport_mode = st.selectbox("运输方式", ["公路运输", "铁路运输", "航空运输", "水路运输"])
        priority = st.selectbox("优先级", ["紧急", "高", "中", "低"])
        planned_date = st.date_input("计划发货日期", datetime.now().date())
        
        if st.button("创建运输计划", type="primary"):
            st.success("运输计划创建成功！")
    
    # 运输计划列表
    st.subheader("运输计划列表")
    
    transport_plans = pd.DataFrame({
        '计划编号': [f'TP{i:06d}' for i in range(1, 16)],
        '计划名称': [f'运输计划{i}' for i in range(1, 16)],
        '发货地': ['北京', '上海', '广州', '深圳', '杭州'] * 3,
        '目的地': ['成都', '西安', '武汉', '长沙', '南京'] * 3,
        '货物类型': ['电子产品', '机械设备', '化工原料', '食品', '纺织品'] * 3,
        '重量(吨)': [5.2, 12.8, 8.5, 3.7, 15.2, 6.9, 9.3, 4.1, 11.7, 7.8, 13.5, 5.6, 8.9, 10.2, 6.4],
        '运输方式': ['公路', '铁路', '公路', '航空', '公路'] * 3,
        '计划日期': [f'2024-03-{16+i}' for i in range(15)],
        '状态': ['待执行', '执行中', '已完成', '待执行', '执行中'] * 3,
        '优先级': ['高', '中', '紧急', '低', '中'] * 3
    })
    
    # 使用缓存来避免重复计算样式，减少表格抖动
    def highlight_plan_status(row):
        if row['状态'] == '待执行':
            return ['background-color: #fff3e0'] * len(row)
        elif row['状态'] == '执行中':
            return ['background-color: #e3f2fd'] * len(row)
        elif row['状态'] == '已完成':
            return ['background-color: #e8f5e8'] * len(row)
        else:
            return [''] * len(row)
    
    styled_df = transport_plans.style.apply(highlight_plan_status, axis=1)
    st.dataframe(styled_df, use_container_width=True, height=400)
    
    # 计划执行分析
    st.subheader("计划执行分析")
    
    col1, col2 = st.columns(2)
    
    with col1:
        # 计划执行状态分布
        execution_status = pd.DataFrame({
            '状态': ['待执行', '执行中', '已完成'],
            '数量': [6, 6, 3]
        })
        
        fig_execution = px.pie(execution_status, values='数量', names='状态',
                             title="计划执行状态分布")
        st.plotly_chart(fig_execution, use_container_width=True)
    
    with col2:
        # 运输方式计划分布
        mode_distribution = pd.DataFrame({
            '运输方式': ['公路', '铁路', '航空'],
            '计划数量': [9, 3, 3]
        })
        
        fig_mode_dist = px.bar(mode_distribution, x='运输方式', y='计划数量',
                             title="运输方式计划分布")
        st.plotly_chart(fig_mode_dist, use_container_width=True)

# 车辆管理页面
elif page_selection == "车辆管理":
    st.header("🚚 车辆管理")
    
    # 车辆概览
    st.subheader("车辆概览")
    
    col1, col2, col3, col4 = st.columns(4)
    
    with col1:
        st.metric("车辆总数", "45辆", "+2辆")
    
    with col2:
        st.metric("在途车辆", "28辆", "+3辆")
    
    with col3:
        st.metric("维修车辆", "3辆", "-1辆")
    
    with col4:
        st.metric("空闲车辆", "14辆", "-4辆")
    
    # 车辆列表
    st.subheader("车辆详情")
    
    vehicle_data = pd.DataFrame({
        '车牌号': [f'京A{i:05d}' for i in range(1, 21)],
        '车型': ['厢式货车', '平板车', '冷藏车', '危险品车', '集装箱车'] * 4,
        '载重(吨)': [5, 10, 8, 12, 20] * 4,
        '车龄(年)': [2, 3, 1, 4, 5, 2, 3, 1, 4, 5, 2, 3, 1, 4, 5, 2, 3, 1, 4, 5],
        '当前状态': ['在途', '空闲', '维修', '在途', '空闲'] * 4,
        '当前位置': ['北京-天津高速', '北京仓库', '维修厂', '上海-南京高速', '上海仓库'] * 4,
        '司机': ['张师傅', '李师傅', '', '王师傅', '赵师傅'] * 4,
        '下次保养': [f'2024-{3+i//4}-{15+i%15:02d}' for i in range(20)],
        '保险到期': [f'2024-{6+i//6}-{10+i%20:02d}' for i in range(20)]
    })
    
    # 使用缓存来避免重复计算样式，减少表格抖动
    def highlight_vehicle_status(row):
        if row['当前状态'] == '维修':
            return ['background-color: #ffebee'] * len(row)
        elif row['当前状态'] == '在途':
            return ['background-color: #fff3e0'] * len(row)
        else:
            return ['background-color: #e8f5e8'] * len(row)
    
    styled_df = vehicle_data.style.apply(highlight_vehicle_status, axis=1)
    st.dataframe(styled_df, use_container_width=True, height=400)
    
    # 车辆性能分析
    st.subheader("车辆性能分析")
    
    col1, col2 = st.columns(2)
    
    with col1:
        # 车辆利用率
        vehicle_utilization = pd.DataFrame({
            '车型': ['厢式货车', '平板车', '冷藏车', '危险品车', '集装箱车'],
            '利用率': [85, 78, 92, 68, 88]
        })
        
        fig_utilization = px.bar(vehicle_utilization, x='车型', y='利用率',
                               title="车辆利用率分析")
        fig_utilization.add_hline(y=80, line_dash="dash", line_color="red", 
                                annotation_text="目标利用率")
        st.plotly_chart(fig_utilization, use_container_width=True)
    
    with col2:
        # 车辆年龄分布
        vehicle_age = pd.DataFrame({
            '车龄': ['1年', '2年', '3年', '4年', '5年'],
            '数量': [4, 8, 8, 8, 8]
        })
        
        fig_age = px.pie(vehicle_age, values='数量', names='车龄',
                       title="车辆年龄分布")
        st.plotly_chart(fig_age, use_container_width=True)
    
    # 维修保养记录
    st.subheader("维修保养记录")
    
    maintenance_records = pd.DataFrame({
        '车牌号': [f'京A{i:05d}' for i in [1, 3, 5, 7, 9, 11, 13, 15]],
        '维修类型': ['定期保养', '故障维修', '定期保养', '故障维修', '定期保养', '故障维修', '定期保养', '故障维修'],
        '维修内容': ['更换机油', '修理发动机', '更换轮胎', '修理刹车系统', '更换滤芯', '修理变速箱', '更换电池', '修理空调'],
        '维修日期': ['2024-03-10', '2024-03-08', '2024-03-12', '2024-03-09', '2024-03-11', '2024-03-07', '2024-03-13', '2024-03-06'],
        '维修费用': [800, 3500, 1200, 2800, 600, 4200, 900, 1500],
        '维修厂': ['A维修厂', 'B维修厂', 'A维修厂', 'C维修厂', 'A维修厂', 'B维修厂', 'A维修厂', 'C维修厂'],
        '状态': ['已完成', '已完成', '已完成', '已完成', '已完成', '已完成', '已完成', '已完成']
    })
    
    st.dataframe(maintenance_records, use_container_width=True, height=300)
    
    # 车辆成本分析
    st.subheader("车辆成本分析")
    
    col1, col2 = st.columns(2)
    
    with col1:
        # 月度维修成本
        months = ['1月', '2月', '3月', '4月', '5月', '6月']
        maintenance_cost = pd.DataFrame({
            '月份': months,
            '维修成本': [15000, 18000, 22000, 16000, 19000, 17000]
        })
        
        fig_cost = px.line(maintenance_cost, x='月份', y='维修成本',
                         title="月度维修成本趋势", markers=True)
        st.plotly_chart(fig_cost, use_container_width=True)
    
    with col2:
        # 燃油消耗分析
        fuel_consumption = pd.DataFrame({
            '车型': ['厢式货车', '平板车', '冷藏车', '危险品车', '集装箱车'],
            '百公里油耗': [12, 15, 18, 16, 22]
        })
        
        fig_fuel = px.bar(fuel_consumption, x='车型', y='百公里油耗',
                        title="车型燃油消耗对比")
        st.plotly_chart(fig_fuel, use_container_width=True)

# 司机管理页面
elif page_selection == "司机管理":
    st.header("👨‍💼 司机管理")
    
    # 司机概览
    st.subheader("司机概览")
    
    col1, col2, col3, col4 = st.columns(4)
    
    with col1:
        st.metric("司机总数", "52人", "+3人")
    
    with col2:
        st.metric("在岗司机", "45人", "+2人")
    
    with col3:
        st.metric("休假司机", "5人", "+1人")
    
    with col4:
        st.metric("培训司机", "2人", "0人")
    
    # 司机列表
    st.subheader("司机详情")
    
    driver_data = pd.DataFrame({
        '工号': [f'D{i:04d}' for i in range(1, 21)],
        '姓名': [f'司机{chr(65+i)}' for i in range(20)],
        '年龄': [25+i%20 for i in range(20)],
        '驾龄': [3+i%15 for i in range(20)],
        '驾照类型': ['A1', 'A2', 'B2', 'A1', 'A2'] * 4,
        '当前状态': ['在途', '休息', '休假', '在途', '休息'] * 4,
        '当前车辆': [f'京A{i:05d}' if i%5 in [0,3] else '' for i in range(20)],
        '联系电话': [f'138{i:08d}' for i in range(20)],
        '安全记录': ['优秀', '良好', '一般', '优秀', '良好'] * 4,
        '证件到期': [f'2025-{6+i//6}-{10+i%20:02d}' for i in range(20)]
    })
    
    def highlight_driver_status(row):
        if row['当前状态'] == '休假':
            return ['background-color: #ffebee'] * len(row)
        elif row['当前状态'] == '在途':
            return ['background-color: #fff3e0'] * len(row)
        else:
            return ['background-color: #e8f5e8'] * len(row)
    
    styled_df = driver_data.style.apply(highlight_driver_status, axis=1)
    st.dataframe(styled_df, use_container_width=True, height=250)
    
    # 司机绩效分析
    st.subheader("司机绩效分析")
    
    col1, col2 = st.columns(2)
    
    with col1:
        # 司机安全记录分布
        safety_records = pd.DataFrame({
            '安全等级': ['优秀', '良好', '一般'],
            '人数': [8, 8, 4]
        })
        
        fig_safety = px.pie(safety_records, values='人数', names='安全等级',
                          title="司机安全记录分布")
        st.plotly_chart(fig_safety, use_container_width=True)
    
    with col2:
        # 司机驾龄分布
        experience_distribution = pd.DataFrame({
            '驾龄范围': ['3-5年', '6-10年', '11-15年', '16年以上'],
            '人数': [6, 8, 4, 2]
        })
        
        fig_experience = px.bar(experience_distribution, x='驾龄范围', y='人数',
                              title="司机驾龄分布")
        st.plotly_chart(fig_experience, use_container_width=True)
    
    # 司机培训记录
    st.subheader("司机培训记录")
    
    training_records = pd.DataFrame({
        '工号': [f'D{i:04d}' for i in [1, 3, 5, 7, 9, 11, 13, 15]],
        '姓名': [f'司机{chr(65+i)}' for i in [0, 2, 4, 6, 8, 10, 12, 14]],
        '培训类型': ['安全培训', '技能培训', '法规培训', '安全培训', '技能培训', '法规培训', '安全培训', '技能培训'],
        '培训内容': ['交通安全', '节油驾驶', '运输法规', '应急处理', '车辆保养', '危险品运输', '防御性驾驶', 'GPS使用'],
        '培训日期': ['2024-03-01', '2024-03-03', '2024-03-05', '2024-03-07', '2024-03-09', '2024-03-11', '2024-03-13', '2024-03-15'],
        '培训时长': ['4小时', '8小时', '6小时', '4小时', '8小时', '6小时', '4小时', '8小时'],
        '考核成绩': [95, 88, 92, 96, 85, 90, 94, 87],
        '状态': ['已完成', '已完成', '已完成', '已完成', '已完成', '已完成', '已完成', '已完成']
    })
    
    st.dataframe(training_records, use_container_width=True)
    
    # 司机排班管理
    st.subheader("司机排班管理")
    
    schedule_data = pd.DataFrame({
        '日期': [f'2024-03-{16+i}' for i in range(7)],
        '白班司机': [f'司机A, 司机B, 司机C, 司机D, 司机E' for _ in range(7)],
        '夜班司机': [f'司机F, 司机G, 司机H, 司机I, 司机J' for _ in range(7)],
        '备班司机': [f'司机K, 司机L' for _ in range(7)],
        '休假司机': [f'司机M, 司机N' for _ in range(7)]
    })
    
    st.dataframe(schedule_data, use_container_width=True)

# 路线优化页面
elif page_selection == "路线优化":
    st.header("🗺️ 路线优化")
    
    # 路线规划
    st.subheader("路线规划")
    
    col1, col2, col3 = st.columns(3)
    
    with col1:
        start_city = st.selectbox("起始城市", ["北京", "上海", "广州", "深圳", "杭州"])
        end_city = st.selectbox("目标城市", ["成都", "西安", "武汉", "长沙", "南京"])
    
    with col2:
        vehicle_type = st.selectbox("车辆类型", ["厢式货车", "平板车", "冷藏车", "危险品车"])
        cargo_weight = st.number_input("货物重量(吨)", min_value=0.1, value=5.0)
    
    with col3:
        optimization_goal = st.selectbox("优化目标", ["最短距离", "最短时间", "最低成本", "综合优化"])
        
        if st.button("生成最优路线", type="primary"):
            st.success("最优路线已生成！")
    
    # 路线方案对比
    st.subheader("路线方案对比")
    
    route_comparison = pd.DataFrame({
        '方案': ['方案A', '方案B', '方案C'],
        '路线': ['北京→石家庄→郑州→武汉→长沙', '北京→天津→济南→徐州→南京→长沙', '北京→太原→西安→重庆→长沙'],
        '总距离(km)': [1250, 1380, 1420],
        '预计时间(h)': [18, 20, 21],
        '过路费(元)': [450, 520, 480],
        '燃油费(元)': [750, 828, 852],
        '总成本(元)': [1200, 1348, 1332],
        '推荐指数': ['⭐⭐⭐⭐⭐', '⭐⭐⭐', '⭐⭐⭐⭐']
    })
    
    # 使用缓存来避免重复计算样式，减少表格抖动
    def highlight_routes(row):
        if '⭐⭐⭐⭐⭐' in row['推荐指数']:
            return ['background-color: #e8f5e8'] * len(row)
        elif '⭐⭐⭐⭐' in row['推荐指数']:
            return ['background-color: #fff3e0'] * len(row)
        else:
            return ['background-color: #f5f5f5'] * len(row)
    
    styled_df = route_comparison.style.apply(highlight_routes, axis=1)

    st.dataframe(styled_df, use_container_width=True, height=250)
    
    # 路线分析图表
    col1, col2 = st.columns(2)
    
    with col1:
        # 距离vs成本分析
        fig_distance_cost = px.scatter(route_comparison, x='总距离(km)', y='总成本(元)',
                                     text='方案', title="距离与成本关系")
        fig_distance_cost.update_traces(textposition="top center")
        st.plotly_chart(fig_distance_cost, use_container_width=True)
    
    with col2:
        # 时间vs成本分析
        fig_time_cost = px.scatter(route_comparison, x='预计时间(h)', y='总成本(元)',
                                 text='方案', title="时间与成本关系")
        fig_time_cost.update_traces(textposition="top center")
        st.plotly_chart(fig_time_cost, use_container_width=True)
    
    # 历史路线数据
    st.subheader("历史路线数据")
    
    historical_routes = pd.DataFrame({
        '路线编号': [f'R{i:04d}' for i in range(1, 16)],
        '起点': ['北京', '上海', '广州', '深圳', '杭州'] * 3,
        '终点': ['成都', '西安', '武汉', '长沙', '南京'] * 3,
        '使用次数': [25, 18, 32, 15, 28, 22, 19, 35, 12, 30, 26, 17, 33, 14, 29],
        '平均距离(km)': [1850, 1200, 1100, 1350, 1250, 1650, 1150, 1050, 1400, 1300, 1750, 1180, 1080, 1380, 1280],
        '平均时间(h)': [26, 18, 16, 20, 18, 24, 17, 15, 21, 19, 25, 17.5, 15.5, 20.5, 18.5],
        '平均成本(元)': [1850, 1200, 1100, 1350, 1250, 1650, 1150, 1050, 1400, 1300, 1750, 1180, 1080, 1380, 1280],
        '准时率': ['96%', '94%', '98%', '92%', '95%', '97%', '93%', '99%', '91%', '96%', '98%', '94%', '99%', '90%', '97%']
    })
    
    st.dataframe(historical_routes, use_container_width=True, height=400)
    
    # 路线优化建议
    st.subheader("路线优化建议")
    
    optimization_suggestions = [
        "🛣️ 优先选择高速公路，减少城市道路行驶时间",
        "⏰ 避开交通高峰期，选择合适的出发时间",
        "⛽ 在油价较低的地区加油，降低燃油成本",
        "🚧 实时关注道路施工信息，及时调整路线",
        "📱 使用GPS导航系统，获取实时交通信息",
        "🔄 建立路线数据库，积累历史经验数据"
    ]
    
    for suggestion in optimization_suggestions:
        st.info(suggestion)

# 运输监控页面
elif page_selection == "运输监控":
    st.header("📡 运输监控")
    
    # 实时监控地图（模拟）
    st.subheader("实时运输监控")
    
    # 创建模拟的GPS数据
    monitoring_data = pd.DataFrame({
        '车辆': [f'京A{i:05d}' for i in range(1, 11)],
        '纬度': [39.9 + np.random.uniform(-2, 2) for _ in range(10)],
        '经度': [116.4 + np.random.uniform(-3, 3) for _ in range(10)],
        '速度(km/h)': [np.random.randint(60, 120) for _ in range(10)],
        '状态': ['正常行驶', '正常行驶', '停车休息', '正常行驶', '加油中', '正常行驶', '正常行驶', '停车休息', '正常行驶', '正常行驶']
    })
    
    # 使用散点图模拟地图显示
    fig_map = px.scatter(monitoring_data, x='经度', y='纬度', 
                       color='状态', size='速度(km/h)',
                       hover_data=['车辆', '速度(km/h)'],
                       title="车辆实时位置监控")
    st.plotly_chart(fig_map, use_container_width=True)
    
    # 监控数据表
    st.subheader("车辆监控数据")
    
    detailed_monitoring = pd.DataFrame({
        '车牌号': [f'京A{i:05d}' for i in range(1, 16)],
        '司机': [f'司机{chr(65+i)}' for i in range(15)],
        '当前位置': ['北京-天津高速', '上海-南京高速', '广州市区', '深圳-东莞高速', '杭州-宁波高速'] * 3,
        '速度(km/h)': [np.random.randint(0, 120) for _ in range(15)],
        '行驶状态': ['正常行驶', '正常行驶', '停车休息', '正常行驶', '加油中'] * 3,
        '累计里程(km)': [np.random.randint(100, 800) for _ in range(15)],
        '剩余油量(%)': [np.random.randint(20, 100) for _ in range(15)],
        '最后更新': [f'2024-03-15 {14+i//3}:{30+i*2:02d}' for i in range(15)],
        '预计到达': [f'2024-03-{16+i//5} {8+i%12:02d}:00' for i in range(15)]
    })
    
    # 使用缓存来避免重复计算样式，减少表格抖动
    def highlight_monitoring_status(row):
        if row['行驶状态'] == '停车休息':
            return ['background-color: #fff3e0'] * len(row)
        elif row['行驶状态'] == '加油中':
            return ['background-color: #e3f2fd'] * len(row)
        else:
            return ['background-color: #e8f5e8'] * len(row)
    
    styled_df = detailed_monitoring.style.apply(highlight_monitoring_status, axis=1)
    st.dataframe(styled_df, use_container_width=True, height=400)
    
    # 异常监控
    st.subheader("异常监控")
    
    col1, col2 = st.columns(2)
    
    with col1:
        # 速度异常监控
        speed_data = pd.DataFrame({
            '时间': pd.date_range(start='2024-03-15 08:00', periods=24, freq='H'),
            '平均速度': [80 + 20*np.sin(i*2*np.pi/24) + np.random.normal(0, 5) for i in range(24)],
            '超速次数': [np.random.randint(0, 5) for _ in range(24)]
        })
        
        fig_speed = px.line(speed_data, x='时间', y='平均速度',
                          title="车队平均速度监控")
        fig_speed.add_hline(y=100, line_dash="dash", line_color="red", 
                          annotation_text="限速")
        st.plotly_chart(fig_speed, use_container_width=True)
    
    with col2:
        # 油耗监控
        fuel_data = pd.DataFrame({
            '车辆': [f'京A{i:05d}' for i in range(1, 6)],
            '百公里油耗': [12.5, 15.2, 18.8, 14.6, 16.3],
            '标准油耗': [13, 15, 18, 15, 16]
        })
        
        fig_fuel = px.bar(fuel_data, x='车辆', y=['百公里油耗', '标准油耗'],
                        title="车辆油耗对比", barmode='group')
        st.plotly_chart(fig_fuel, use_container_width=True)
    
    # 监控报警
    st.subheader("监控报警")
    
    alerts = pd.DataFrame({
        '时间': ['14:30', '13:45', '12:20', '11:15', '10:30'],
        '车辆': ['京A00008', '京A00003', '京A00012', '京A00005', '京A00009'],
        '报警类型': ['超速报警', '偏离路线', '长时间停车', '油量不足', '设备离线'],
        '报警级别': ['中', '高', '低', '中', '高'],
        '当前状态': ['已处理', '处理中', '已处理', '已处理', '处理中'],
        '处理人': ['调度员A', '调度员B', '调度员A', '调度员C', '调度员B']
    })
    
    # 使用缓存来避免重复计算样式，减少表格抖动
    def highlight_alert_level(row):
        if row['报警级别'] == '高':
            return ['background-color: #ffebee'] * len(row)
        elif row['报警级别'] == '中':
            return ['background-color: #fff3e0'] * len(row)
        else:
            return ['background-color: #e8f5e8'] * len(row)
    
    styled_df = alerts.style.apply(highlight_alert_level, axis=1)
    st.dataframe(styled_df, use_container_width=True, height=250)

# 成本分析页面
elif page_selection == "成本分析":
    st.header("💰 成本分析")
    
    # 成本概览
    st.subheader("运输成本概览")
    
    col1, col2, col3, col4 = st.columns(4)
    
    with col1:
        st.metric("本月总成本", "¥456,800", "-¥23,200")
    
    with col2:
        st.metric("燃油成本", "¥198,500", "-¥12,300")
    
    with col3:
        st.metric("人工成本", "¥156,200", "+¥5,600")
    
    with col4:
        st.metric("单公里成本", "¥3.85", "-¥0.15")
    
    # 成本构成分析
    st.subheader("成本构成分析")
    
    col1, col2 = st.columns(2)
    
    with col1:
        # 成本构成饼图
        cost_structure = pd.DataFrame({
            '成本类型': ['燃油费', '人工费', '过路费', '维修费', '保险费', '其他'],
            '金额': [198500, 156200, 68900, 23400, 7800, 2000],
            '占比': ['43.5%', '34.2%', '15.1%', '5.1%', '1.7%', '0.4%']
        })
        
        fig_cost_pie = px.pie(cost_structure, values='金额', names='成本类型',
                            title="运输成本构成")
        st.plotly_chart(fig_cost_pie, use_container_width=True)
    
    with col2:
        # 月度成本趋势
        months = ['1月', '2月', '3月', '4月', '5月', '6月']
        monthly_costs = pd.DataFrame({
            '月份': months,
            '总成本': [480000, 465000, 456800, 470000, 485000, 475000],
            '燃油成本': [210000, 205000, 198500, 208000, 215000, 210000],
            '人工成本': [150000, 152000, 156200, 155000, 158000, 157000]
        })
        
        fig_cost_trend = px.line(monthly_costs, x='月份', 
                               y=['总成本', '燃油成本', '人工成本'],
                               title="月度成本趋势")
        st.plotly_chart(fig_cost_trend, use_container_width=True)
    
    # 单位成本分析
    st.subheader("单位成本分析")
    
    unit_cost_data = pd.DataFrame({
        '运输方式': ['公路运输', '铁路运输', '航空运输', '水路运输'],
        '单公里成本(元)': [3.85, 2.20, 12.50, 1.80],
        '单吨公里成本(元)': [0.65, 0.35, 2.80, 0.25],
        '准时率(%)': [96.8, 94.2, 99.5, 88.5],
        '适用场景': ['中短途', '长途大宗', '紧急货物', '大宗低值']
    })
    
    st.dataframe(unit_cost_data, use_container_width=True, height=250)
    
    # 成本对比分析
    col1, col2 = st.columns(2)
    
    with col1:
        # 不同运输方式成本对比
        fig_mode_cost = px.bar(unit_cost_data, x='运输方式', y='单公里成本(元)',
                             title="不同运输方式单公里成本对比")
        st.plotly_chart(fig_mode_cost, use_container_width=True)
    
    with col2:
        # 成本效益分析
        cost_benefit = pd.DataFrame({
            '运输方式': ['公路运输', '铁路运输', '航空运输', '水路运输'],
            '成本指数': [100, 57, 325, 47],
            '时效指数': [100, 85, 130, 65]
        })
        
        fig_benefit = px.scatter(cost_benefit, x='成本指数', y='时效指数',
                               text='运输方式', title="成本效益分析")
        fig_benefit.update_traces(textposition="top center")
        st.plotly_chart(fig_benefit, use_container_width=True)
    
    # 成本优化建议
    st.subheader("成本优化建议")
    
    optimization_suggestions = [
        "⛽ 建立燃油采购联盟，批量采购降低燃油成本",
        "🛣️ 优化运输路线，减少空驶和绕行",
        "📊 建立成本核算体系，精确计算各项成本",
        "🚛 提高车辆装载率，降低单位运输成本",
        "🔧 加强车辆维护保养，延长使用寿命",
        "📱 使用运输管理系统，提高调度效率",
        "🤝 与客户建立长期合作，获得稳定货源",
        "📈 定期分析成本数据，及时发现异常"
    ]
    
    for suggestion in optimization_suggestions:
        st.info(suggestion)
    
    # 成本预算与实际对比
    st.subheader("成本预算与实际对比")
    
    budget_comparison = pd.DataFrame({
        '成本项目': ['燃油费', '人工费', '过路费', '维修费', '保险费'],
        '预算金额': [200000, 150000, 70000, 25000, 8000],
        '实际金额': [198500, 156200, 68900, 23400, 7800],
        '差异': [-1500, 6200, -1100, -1600, -200],
        '差异率': ['-0.8%', '+4.1%', '-1.6%', '-6.4%', '-2.5%']
    })
    
    # 使用缓存来避免重复计算样式，减少表格抖动
    def highlight_budget(row):
        if row['差异'] > 0:
            return ['background-color: #ffebee'] * len(row)
        else:
            return ['background-color: #e8f5e8'] * len(row)
    
    styled_df = budget_comparison.style.apply(highlight_budget, axis=1)
    st.dataframe(styled_df, use_container_width=True, height=250)

# 页面底部信息
st.markdown("---")
st.markdown(
    """
    <div style="text-align: center; color: #666; font-size: 0.9rem;">
        运输管理系统 | 数据更新时间: {}
    </div>
    """.format(datetime.now().strftime("%Y-%m-%d %H:%M:%S")),
    unsafe_allow_html=True
)